扩展抽象类
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
由于抽象类并不是完整的类,因此我们并不能直接使用抽象类。如果我们要使用它我们必须通过继承的方式使之成为一个完整的类。这里的完整类是指它不包含任何抽象方法的类(实现了父类的所有抽象方法)。我们能通过一般的方法继承Employee类:
public abstract class Employee {
// 员工编号
protected int number;
// 员工姓名
protected String name;
// 员工薪资(年)
protected double salary;
public Employee(int number, String name) {
System.out.println("创建一个Employee对象, 编号:" + number + ", 姓名: " + name);
this.number = number;
this.name = name;
}
public String getName() {
return name;
}
public int getNumber() {
return number;
}
// 设置年薪资
public void setSalary(double newSalary) {
if (newSalary >= 0.0) {
this.salary = newSalary;
}
}
// 计算月薪资
public double computePay() {
return salary / 12;
}
public String toString() {
return "编号: " + number + ", 姓名: " + name;
}
}
尽管我们不能实例化一个Employee类的对象,但是如果我们让Sales类继承Employee类,这样我们就可以使用Sales类创建对象了,该对象将从Employee类继承3个成员变量和6个成员方法。
public class AbstractDemo {
public static void main(String[] args) {
Employee e1 = new Sales(10, "Macy Zhao");
Sales s1 = new Sales(11, "Jack Lee");
/* 以下是不允许的,会引发错误 */
// Employee e2 = new Employee(12, "Tina Zhang");
e1.setSalary(120000);
s1.setSalary(180000);
// e2.setSalary(90000);
System.out.println(e1.toString() + ", 月薪为: " + e1.computePay());
System.out.println(s1.toString() + ", 月薪为: " + s1.computePay());
// System.out.println(e2.toString() + ", 月薪为: " + e2.computePay());
}
}
在线练习
{$ activeFileHint $}